package edu.ustb.efws.utils;


/**
 * 风险计算
 *
 * @author ZhenWang
 */
public class SafeMath {

    /**
     * 风险分数计算
     *
     * @param i    电流
     * @param u    电压
     * @param iMax 一个月内的电流最大值
     * @param t    温度
     * @param w    湿度
     * @return
     */
    public static float[] riskScore(float i, float u, float iMax, float t, float w) {

        float s1 = 0f, s2 = 0f;
        if (i < iMax) {
            s1 = (float) ((i / iMax) * 40 + (u - 220) * 0.1);
        } else {
            s1 = (float) ((40 + (u - 220) * 0.1) + ((i / iMax) - 1) * 80);
        }
        if (t > 20) {
            s2 = (float) ((t - 20) * 2 + Math.abs(w - 60) * 0.2);
        } else {
            s2 = (float) (Math.abs(w - 60) * 0.2);
        }

        if(Float.isNaN(s1) && Float.isNaN(s2)){
            return new float[]{0f, 0f};
        }

        if(Float.isNaN(s1)){
            return new float[]{1, s2};
        }

        if(Float.isNaN(s2)){
            return new float[]{0, s1};
        }

        return s1 > s2? new float[]{0, s1}: new float[]{1, s2};
    }

    /**
     * 风险等级
     *
     * @param score 风险分数
     * @return 风险等级
     */
    public static String riskGrade(float score) {
        if (score > 80) {
            return "极高风险";
        } else if (score > 60) {
            return "高风险";
        } else if (score > 40) {
            return "中等风险";
        } else if (score > 20) {
            return "低风险";
        } else {
            return "安全";
        }
    }
}
